#ifndef JATEKMENET_HPP
#define	JATEKMENET_HPP

#include "mi.hpp"
#include "naplo.hpp"
#include <string>

/**
 * A pályán még van hely és senki nem nyert
 */
#define PALYA_ALLAPOT_OK -1
/**
 * A végeredmény: X nyert
 */
#define PALYA_ALLAPOT_X_NYERT 0
/**
 * A végeredmény: O nyert
 */
#define PALYA_ALLAPOT_O_NYERT 1
/**
 * A végeredmény: Döntetlen
 */
#define PALYA_ALLAPOT_DONTETLEN 2

/**
 * A végeredmény indoklása: Tiszta győzelem
 */
#define INDOKLAS_TISZTA 0
/**
 * A végeredmény indoklása: Érvénytelen lépés
 */
#define INDOKLAS_ERVENYTELEN_LEPES 1
/**
 * A végeredmény indoklása: A pálya betelt
 */
#define INDOKLAS_PALYA_BETELT 2

using namespace std;

/**
 * Játékmenetet lebonyolító osztály
 */
class Jatekmenet {
private:
    /**
     * Pálya
     */
    char **palya;
    /**
     * Pálya szélessége
     */
    int palyaX;
    /**
     * Pálya magassága
     */
    int palyaY;
    /**
     * A jelenlegi játékos
     */
    int jelenlegiJatekos;
    /**
     * Első MI objektuma
     */
    MI *mi0;
    /**
     * Második MI objektuma
     */
    MI *mi1;
    /**
     * A napló objektuma
     */
    Naplo *naplo;
public:
    /**
     * A Játékmenet konstruktora
     * @param x pálya szélessége
     * @param y pálya magassága
     * @param mi0fn első MI fájlneve
     * @param mi1fn második MI fájlneve
     * @param naplo Napló objektum
     */
    Jatekmenet(int x, int y, string mi0fn, string mi1fn, Naplo *naplo);
    /**
     * A játékmenetet lebonyolító metódus
     * @return true, ha minden rendben, false egyébként
     */
    int jatek();
private:
    /**
     * A pálya állapotát meghatározó segéd-metódus.
     * @return pálya állapot-kód
     */
    int palyaAllapot();
};

#endif	/* JATEKMENET_HPP */
